#include "./Thread.h"

Thread::Thread() {
	activo = false;
	liberar = false;
	pthread_attr_init(&this->attr);
}

Thread::~Thread() {
	stop();
	pthread_attr_destroy(&this->attr);
	if (liberar)
		pthread_detach(this->hilo);
}

void Thread::run() {
	if (!activo) {
		activo = (pthread_create(&(this->hilo), &this->attr, start, this) == 0);
		liberar = true;
		activo = true;
	}
}

void Thread::stop() {
	if (activo) {
		activo = false;
		pthread_cancel(hilo);
	}
}

void Thread::join() {
	pthread_join(hilo, NULL);
}

bool Thread::running() const {
	return activo;
}

void* Thread::start(void* arg) {
	Thread* hiloActual = (Thread*) arg;
	hiloActual->correr();
	hiloActual->activo = true;
	return NULL;
}
